package com.xiyin.controller;

import com.xiyin.entity.UserLock;
import com.xiyin.service.IUserLockService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 功能点: 1.乐观锁（乐观锁是一种并发控制机制，用于在多用户共享资源的情况下防止数据冲突。在数据库中，乐观锁通常通过在数据表中添加一个版本字段（version）来实现。每当数据被修改时，版本号会递增。在更新数据时，系统会检查当前版本号是否与数据库中的版本号相匹配，如果匹配则更新成功，否则更新失败，提示发生了并发冲突）
 *        2.通过sql注入器查询数据
 * @author xukaihang
 * @since 2024-08-18
 */
@RestController
@RequestMapping("/user-lock")
public class UserLockController {
    @Autowired
    private IUserLockService userLockService;
    //新增
    @PostMapping("/add")
    public ResponseEntity<UserLock> add() {
        UserLock user = new UserLock();
        user.setId(1);
        user.setUserName("乐观锁用户");
        user.setAge(0);
        user.setEmail("765796440@qq.com");
        user.setCreateTime(LocalDateTime.now());
        user.setUpdateTime(LocalDateTime.now());
        user.setStatus("0");
        user.setVersion(0);
        return ResponseEntity.ok(userLockService.save(user)? user : null);
    }

    //修改（乐观锁，先查询获取乐观锁的值，然后在进行更新，它会自动+1）
    //int rowsAffected = userMapper.updateById(user);
    //if (rowsAffected == 0) {
    //    // 更新失败，可以在这里处理逻辑，比如记录日志或抛出自定义异常
    //}
    @PostMapping("/update")
    public ResponseEntity<UserLock> update() {
        UserLock userLock = userLockService.getById(1);
        userLock.setAge(1);
        return ResponseEntity.ok(userLockService.updateById(userLock)? userLock : null);
    }
    /**
     * 查询-sql注入器（自定义）
     * @Date 2024/8/18 16:24
     **/
    @GetMapping ("/queryAll")
    public ResponseEntity<List<UserLock>> queryAll() {
        List<UserLock> userLocks = userLockService.queryAll();
        return ResponseEntity.ok(userLocks);
    }

    /**
     *
     * basemapper提供的查询
     * @Date 2024/8/18 16:24
     **/
    @GetMapping ("/queryList")
    public ResponseEntity<List<UserLock>> queryList() {
        List<UserLock> userLocks = userLockService.queryList();
        return ResponseEntity.ok(userLocks);
    }
}
